package com.icbc.hook

import android.annotation.SuppressLint
import android.content.Context
import android.view.View

object HookSetOnClickListenerHelper {

    /**
     * hook的核心代码
     * 这个方法的唯一目的: 用自己的点击事件, 替换掉View原来的点击事件
     *
     * @param view hook的范围仅限于这个View
     */
    @SuppressLint("DiscouragedPrivateApi", "PrivateApi")
    fun hook(context: Context, view: View) {
        val method = View::class.java.getDeclaredMethod("getListenerInfo").apply {
            //  由于getListenerInfo 方法并不是public的,所以要加这个代码来保证访问权限
            isAccessible = true
        }
        //  这里拿到的就是ListenerInfo对象,也就是点击事件的持有者
        val listenerInfo = method.invoke(view)

        val listenerInfoClz = Class.forName("android.view.View\$ListenerInfo")
        val field = listenerInfoClz.getDeclaredField("mOnClickListener")
        //  取得真实的mOnClickerInstance
        val onClickListenerInstance = field.get(listenerInfo)


    }
}